/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controlador;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.StringTokenizer;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeModel;
import modelo.Capitulo;

/**
 *
 * @author antoniocarou
 */
public class ManejadorFicheros {

    private JTree jTree;
    private TreeModel arbol;
    private ArrayList<File> ficheros;
    private File directorio;

    public ManejadorFicheros() {
        this.jTree = new JTree();
        this.arbol = this.jTree.getModel();
        this.ficheros = new ArrayList<File>();
    }

    public ManejadorFicheros(JTree jTree) {
        this.jTree = jTree;
        this.arbol = this.jTree.getModel();
        this.ficheros = new ArrayList<File>();
    }

    /**
     * *********
     * Getters * *********
     */
    public JTree getjTree() {
        return jTree;
    }

    public TreeModel getArbol() {
        return arbol;
    }

    public ArrayList getFicheros() {
        return ficheros;
    }

    public File getDirectorio() {
        return directorio;
    }

    /**
     * *********
     * Setters * *********
     */
    public void setjTree(JTree jTree) {
        this.jTree = jTree;
    }

    public void setArbol(TreeModel arbol) {
        this.arbol = arbol;
    }

    public void setFicheros(ArrayList ficheros) {
        this.ficheros = ficheros;
    }

    public void setDirectorio(File directorio) {
        this.directorio = directorio;
    }

    /**
     * *********
     * Metodos * *********
     */
    public void dameListaArchivos(File directorio) throws FileNotFoundException, IOException {
        this.directorio = directorio;
        //definimos el modelo que usaremos para crear el arbol
        DefaultMutableTreeNode modeloArbol = new DefaultMutableTreeNode(directorio);
        //Creamos el arbol a partir del modelo de arbol padre anterior:
        DefaultTreeModel modelo = new DefaultTreeModel(modeloArbol);
        //Establecemos ese modelo como el del jTree de nuestro programa
        this.jTree.setModel(modelo);
        //llenamos el arbol con los archivos del directorio:
        this.crearArbol(modeloArbol, directorio);
    }

    private void crearArbol(DefaultMutableTreeNode arbol, File rootDirectory) throws FileNotFoundException, IOException {
        File[] ficherosTemp;
        //Comprobamos que el directorio sea efectivamente un directorio.
        if (!rootDirectory.isHidden() && rootDirectory.isDirectory()) {
            ficherosTemp = rootDirectory.listFiles();
            for (int i = 0; i < ficherosTemp.length; i++) {
                DefaultMutableTreeNode tempTree = new DefaultMutableTreeNode(ficherosTemp[i].getName());
                if (!ficherosTemp[i].isHidden() && ficherosTemp[i].isDirectory()) {
                    arbol.add(tempTree);
                    crearArbol(tempTree, ficherosTemp[i]);
                } else if(!ficherosTemp[i].getName().startsWith(".") && !ficherosTemp[i].isHidden()){
                    if (this.esVideo(ficherosTemp[i])) {
                        Capitulo serie = new Capitulo(ficherosTemp[i].getName());
                        //TODO: Crear un metodo que obtenga los enlaces de descarga para introducirlo en el nodo antes del add
                        arbol.add(tempTree);
                        
                        
                    }
                }
            }
        }
    }



    private boolean esVideo(File archivo) throws FileNotFoundException, IOException {
        boolean resultado = false;
        String extensiones = ManejadorPropiedades.damePropiedad("archivosVideo");
        String[] listaExtensiones = extensiones.split(";");
        StringTokenizer tokenizer = new StringTokenizer(archivo.getName(), ".");
        String extension = new String();
        while(tokenizer.hasMoreElements()){
          extension = tokenizer.nextToken();
        }
        for (int i = 0; i < listaExtensiones.length; i++) {
            if (extension.equals(listaExtensiones[i])) {
                resultado = true;
            }
        }
        return resultado;
    }
}
